package random;

/**
 * x的平方根
 *
 * 实现 int sqrt(int x) 函数。
 * 计算并返回 x 的平方根，其中 x 是非负整数。
 * 由于返回类型是整数，结果只保留整数的部分，小数部分将被舍去。
 */

public class L69 {

    public static void main(String[] args) {

        System.out.println(mySqrt(8));
    }


    /*
    官方解法：
    一、用指数函数exp 和对数函数 ln 代替平方根函数的方法。我们通过有限的可以使用的数学函数，得到我们想要计算的结果。
    二、二分法
    三、使用泰勒公式
     */
    public static int mySqrt(int x) {

        if (x == 0) {
            return 0;
        }
        int ans = (int) Math.exp(0.5 * Math.log(x));
        return (long) (ans + 1) * (ans + 1) <= x ? ans + 1 : ans;
    }


}
